/**
 * 工具函数模块 - 提供通用的辅助功能
 */
const Utils = {
    /**
     * 创建带样式的DOM元素
     * @param {string} tag - 元素标签名
     * @param {Object} props - 元素属性和样式
     * @param {Array} children - 子元素数组
     * @returns {HTMLElement} 创建的DOM元素
     */
    createElement(tag, props = {}, children = []) {
        const element = document.createElement(tag);

        // 设置属性
        Object.keys(props).forEach((key) => {
            if (key === 'style' && typeof props[key] === 'object') {
                Object.assign(element.style, props[key]);
            } else if (key.startsWith('data-')) {
                element.setAttribute(key, props[key]);
            } else {
                element[key] = props[key];
            }
        });

        // 添加子元素
        children.forEach((child) => {
            if (typeof child === 'string') {
                element.appendChild(document.createTextNode(child));
            } else if (child instanceof Node) {
                element.appendChild(child);
            }
        });

        return element;
    },

    /**
     * 防抖函数 - 限制函数在短时间内的重复调用
     * @param {Function} func - 要防抖的函数
     * @param {number} wait - 等待时间（毫秒）
     * @returns {Function} 防抖后的函数
     */
    debounce(func, wait) {
        let timeout;
        return function executedFunction(...args) {
            const later = () => {
                clearTimeout(timeout);
                func(...args);
            };
            clearTimeout(timeout);
            timeout = setTimeout(later, wait);
        };
    },

    /**
     * 安全的事件监听器添加方法
     * @param {HTMLElement} element - 目标元素
     * @param {string} event - 事件类型
     * @param {Function} handler - 事件处理函数
     */
    on(element, event, handler) {
        if (element && element.addEventListener) {
            element.addEventListener(event, handler, false);
        }
    },
    
    /**
     * 安全的事件监听器移除方法
     * @param {HTMLElement} element - 目标元素
     * @param {string} event - 事件类型
     * @param {Function} handler - 事件处理函数
     */
    off(element, event, handler) {
        if (element && element.removeEventListener) {
            element.removeEventListener(event, handler, false);
        }
    },
};

// 导出Utils模块
if (typeof module !== 'undefined') {
    module.exports = Utils;
}
